package com.pan.admin.generator.constant;

import com.gitee.apanlh.util.base.MapUtils;
import com.gitee.apanlh.util.reflection.ReflectionUtils;

import java.lang.reflect.Field;
import java.util.Map;

/**
 *  生成字段注释
 *
 *  @author Pan
 */
class ApiGenFieldDocConstant {

    /** 生成文档注释MAP */
    static Map<ApiGenFieldEnum, String> genDocMap = initGenDoc();

    static final String AGE = """
          //  获取年龄
""";

    static final String SEX = """
          //  性别-要获取中文性别（男/女）使用apiFieldConverter.getSexText
""";

    static final String CITY = """
        //  城市/默认带市
        //  城市/默认不带市
""";

    static final String OVERDUE = """
        /*
           我方字典-信用情况（逾期）
           1.无逾期
           2.当前有逾期
           3.一年以内无逾期
           如果对方文档是需要返回"0"和"1" 使用:apiFieldConverter.hasOverdueToNumber
           如果对方文档是需要返回"有"和"无",使用:apiFieldConverter.hasOverdueToStr方法
         */
""";

    static final String CAR_INFO = """
        /*
           我方字典-车辆情况
           1.无车产
           2.有车不抵押
           3.有车可抵押
           4.有车
           如果对方文档是需要返回"0"和"1" 使用:apiFieldConverter.hasCarInfoToNumber
           如果对方文档是需要返回"有"和"无",使用:apiFieldConverter.hasCarInfoToStr
         */
""";

    static final String LOAN_AMOUNT = """
        /*
           我方字典-贷款金额
           1.3万以下
           2.5万-10万
           3.10万-20万
           4.20万以上
           如果对方文档需要"带单位"如:3万，5万,使用apiFieldConverter.getLoanAmountUnit
           如果对方文档需要"数字形式"使用apiFieldConverter.getLoanAmountInt(),返回30000，50000
         */
""";

    static final String HB_LIMIT = """
        /*
            我方字典-花呗额度
            1.无额度
            2.3千以下
            3.3千-1万
            4.1万-3万
            5.3万以上
            如果对方文档需要"文字类型"如:无额度,3千以下,使用使用apiFieldConverter.getHbLimitText
         */
""";

    static final String BT_LIMIT = """
        /*
            我方字典-白条额度
            1.无额度
            2.3千以下
            3.3千-1万
            4.1万-3万
            5.3万以上
            如果对方文档需要"文字类型"如:无额度,3千以下,使用使用apiFieldConverter.getBtLimitText
         */
""";

    static final String SESAME_CREDIT = """
        /*
           我方字典-芝麻分
           1.600分以下
           2.600~649分
           3.650~699分
           4.700分以上
           如果对方需要"分值形式"如:650，700,使用apiFieldConverter.getSesameCreditNumber/getSesameCreditStr
           如果对方要"文字形式"如:600分以下,600~649分,使用apiFieldConverter.getSesameCreditText
         */
""";

    static final String CAREER = """
        /*
           我方字典-职业
           1.上班族
           2.自由职业
           3.企业主（有营业执照）
           4.公务员或事业单位
           如果对方需要"文字形式"如:上班族/公务员或事业单位,使用apiFieldConverter.getCareerText
           如果对方需要"有无职业或者是否有工作"如:有/无，使用使用apiFieldConverter.hasCareerToStr
           如果对方需要"有无职业或者是否有工作"如:0/1，使用使用apiFieldConverter.hasCareerToNumber
         */
""";

    static final String SOCIAL_SECURITY = """
        /*
          我方字典-社保缴纳
          1.无社保
          2.缴纳6个月以下
          3.缴纳6个月以上
          4.有社保
          如果对方需要"有无社保情况"如:有/无，使用使用apiFieldConverter.hasSocialSecurityToStr
          如果对方需要"有无社保情况"如:0/1，使用使用apiFieldConverter.hasSocialSecurityToNumber
        */
""";

    static final String MONTHLY_SALARY = """
        /*
          我方字典-月收入
          1.1000-3000
          2.3000-8000
          3.8000~15000
          4.15000~30000
          5.30000以上
          如果对方需要"数值形式"如:3000,5000,使用apiFieldConverter.getMonthlySalaryNumber
          如果对方需要"有无月收入"如:有/无，使用使用apiFieldConverter.hasMonthlySalaryToStr
          如果对方需要"有无月收入"如:0/1，使用使用apiFieldConverter.hasMonthlySalaryToNumber
        */
""";

    static final String REAL_ESTATE_INFO = """
        /*
          我方字典-房产情况
          1.无房产
          2.有房不抵押
          3.有房可抵押
          4.有房产
          5.有按揭房产
          6.有全款房产
          如果对方需要"有无月收入"如:有/无，使用使用apiFieldConverter.hasRealEstateInfoToStr
          如果对方需要"有无月收入"如:0/1，使用使用apiFieldConverter.hasRealEstateInfoToNumber
        */
""";

    static final String BIZ_BANK_DETAILS = """
       /*
          我方字典-总经营流水
          1.10~50万元
          2.50~100万元
          3.100~500万元
        */
""";

    static final String BIZ_LICENSE_YEAR = """
       /*
          营业执照注册年限
          1.未注册
          2.注册1年以下
          3.注册1~5年
          4.注册5年以上
       */
""";

    static final String SALARY_PAY_METHOD = """
       /*
          我方字典-工资发放形式/银行代发/打卡方式
          1.银行代发打卡
          2.现金收入
          3.个人转账
          如果对方只需要"银行代发-有/无"使用:apiFieldConverter.hasSalaryBankToStr
          如果对方只需要"银行代发-是/否"使用:apiFieldConverter.hasSalaryBankChooseToStr
          如果对方只需要"银行代发-0/1"使用:apiFieldConverter.hasSalaryBankToNumber
        */
""";

    static final String PROVIDENT_FUND = """       
        /*
          我方字典-公积金
          1.无公积金
          2.缴纳6个月以下
          3.缴纳6个月以上
          4.有公积金
          如果对方只需要"有/无"使用:apiFieldConverter.hasProvidentFundToStr
          如果对方只需要"0/1"使用:apiFieldConverter.hasProvidentFundToNumber
        */
""";

    static final String CREDIT_LIMIT = """
        /*
          我方字典-信用卡额度
          1.无信用卡
          2.3千以下
          3.3千-1万
          4.1-3万
          5.3万以上
          6.有信用卡
          如果对方只需要"有/无"使用:apiFieldConverter.hasCreditLimitToStr
          如果对方只需要"0/1"使用:apiFieldConverter.hasCreditLimitToNumber
        */
""";

    static final String INSURANCE_POLICY = """
       /*
            我方字典-保险保单
            1.无保险保单
            2.缴纳未满1年
            3.缴纳1年以上
            4.有保险保单
            如果对方只需要"有/无"使用:apiFieldConverter.hasInsurancePolicyToStr
            如果对方只需要"0/1"使用:apiFieldConverter.hasInsurancePolicyToNumber
        */
""";

    static final String LOAN_PURPOSE = """
        /*
          我方字典-借款用途
          1.旅游
          2.教育
          3.婚庆
          4.装修
          5.医疗
          6.个人消费
        */
""";

    static final String YEARS_SERVICE = """
        /*
          我方字典-单位工龄
          1.0-6个月
          2.6-12个月
          3.12个月以上
        */
""";

    static final String EDUCATION_ATTAINMENT = """
        /*
          我方字典-学历
          1.初中及以下
          2.中专
          3.高中
          4.大专
          5.本科
          6.研究生及以上
        */
""";

    /**
     *  初始化文档MAP
     *
     *  @return Map
     */
    static Map<ApiGenFieldEnum, String> initGenDoc() {
        Map<ApiGenFieldEnum, String> docMap = MapUtils.newEnumMap(ApiGenFieldEnum.class);
        ApiGenFieldDocConstant apiGenFieldDocConstant = new ApiGenFieldDocConstant();
        Field[] fields = ReflectionUtils.getFields(ApiGenFieldDocConstant.class, false);

        for (Field field : fields) {
            String name = field.getName();
            String fieldValue = (String) ReflectionUtils.getFieldValue(field, apiGenFieldDocConstant);
            ApiGenFieldEnum apiGenFieldEnum = ApiGenFieldEnum.getByName(name);

            if (apiGenFieldEnum == null) {
                continue;
            }
            docMap.put(apiGenFieldEnum, fieldValue);
        }
        return docMap;
    }

    /**
     *  获取文档注释
     *
     *  @param  apiGenFieldEnum 生成字段枚举
     *  @return String
     */
    static String getDoc(ApiGenFieldEnum apiGenFieldEnum) {
        return genDocMap.get(apiGenFieldEnum);
    }

    public static void main(String[] args) {
        String s = genDocMap.get(ApiGenFieldEnum.PROVIDENT_FUND);
        System.out.println(s);
    }
}
